package com.tedu.API;

import org.junit.Test;

/**
 *
 */
public class StringBuilderAPI {
    /**
     * 大量拼接：注意String造成内存溢出
     * 不要运行
     */
   @Test
   public void testString(){
//       String str="字符串";
//       for (int i=0;i<2;i++){
//           str=str+i;  //字符串 一值创建对象放入常量池中
//           System.out.println(str);
//       }
       /**
        * 假设：拼接出10000000000w个String--内存【开销过大】
        * 操作系统发现内存空间越来越少，会在硬盘上开辟空间，电脑会卡
        *
        * 解决方案：不创建新对象，原来的对象上实现拼接【添加，替换，插入】
        * StringBuilder对象  可变字符串对象
        * 语法：StringBuilder sb=new StringBuilder("字符串");
        *
        * C语言 ： 变量   int a=malloc(4);  开辟四个字节的空间
        *               a=1;
        *               free(a); 清理内存
        * java语言  变量  int a=1 内存开辟空间，保存1， JVM虚拟机提供GC功能
        *               内存会在内存溢出
        */

   }
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String大量的拼接，造成内存溢出】
        String str="那就是文档";
        StringBuilder sb=new StringBuilder(str);
        //append方法 添加新字符串，等同于加号【拼接】
        sb.append("小可爱");
        System.out.println(sb);
    }
    /**
     * replace方法 替换 返回值String
     * 将字符串中指定范围内的内容替换成给定的内容
     *  口诀“含头不含尾”
     *  replace(int start,int end,String str)
     *          开始位置    结束位置   替换内容
     *
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串，构造器中直接传字符串
        StringBuilder sb=new StringBuilder("你就是我的小可爱~~~");
        sb=sb.replace(5,8,"大傻叉");
        System.out.println(sb);

    }
    /**
     * insert方法 返回值 String  插入
     * 作用：将给定的字符串插入到当前字符串中的某个位置
     * insert(int index,String str)
     *        插入位置    内容
     *
     */
    @Test
    public void testInsert(){
        //创建可变的字符串对象
        StringBuffer sb=new StringBuffer("你是我的小可爱");
        sb=sb.insert(0,"今天");
        System.out.println(sb);
    }
    /**
     * StringBuilder StringBuffer
     *  StringBuilder和StringBuffer 方法完全一致【追加，替换，插入】
     *  StringBuffer ---JDK1.0  ---线程安全 【运行效率低】
     *  StringBuilder----JDK1.5---线程不安全 【效率高】
     *
     *  需求说明书：模块用什么类【标注】
     *
     */
}
